package com.zhentao;

import cn.xfyun.api.TtsClient;
import com.zhentao.config.PropertiesConfig;
import cn.xfyun.model.response.TtsResponse;
import cn.xfyun.service.tts.AbstractTtsWebSocketListener;
import okhttp3.Response;
import okhttp3.WebSocket;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException ;
import java.security.SignatureException;
import java.util.UUID;


public class TtsClientApp {

    // 从配置文件中获取科大讯飞应用ID
    private static final String appId = PropertiesConfig.getAppId();
    // 从配置文件中获取API密钥
    private static final String apiKey = PropertiesConfig.getApiKey();
    // 从配置文件中获取API密钥Secret
    private static final String apiSecret = PropertiesConfig.getApiSecret();

    // 设置音频文件保存路径
    private static String resourcePath = "D:/img/image/";
    // 生成唯一的音频文件名，使用UUID防止重复
    private static String filename = "tts_" + UUID.randomUUID().toString() + ".mp3";

    /**
     * 主方法，程序入口
     * @param args 命令行参数
     * @throws MalformedURLException URL格式异常
     * @throws SignatureException 签名异常
     * @throws UnsupportedEncodingException 不支持的编码异常
     * @throws FileNotFoundException 文件未找到异常
     */
    public static void main(String[] args) {
        // 创建TTS客户端构建器
        TtsClient ttsClient = new TtsClient.Builder()
                // 设置认证信息：appId, apiKey, apiSecret
                .signature(appId, apiKey, apiSecret)
                .vcn("aisbabyxu")
                //设置音量
                .volume(50)
                //设置语速
                .speed(80)
                //设置语调
                .pitch(50)
//                .bgs(2)
//                .ent("sad")
                //设置音频编码格式
//                .aue("pcm")
                // 构建TTS客户端实例
                .build();

        // 创建要保存的音频文件对象
        File file = new File(resourcePath + filename);

        try {
            // 发送文本进行语音合成
            ttsClient.send("语音合成流式接口将文字信息转化为声音信息",
                    // 创建WebSocket监听器，处理合成结果
                    new AbstractTtsWebSocketListener(file) {
                        /**
                         * 合成成功回调
                         * @param bytes 合成的音频字节数据
                         */
                        @Override
                        public void onSuccess(byte[] bytes) {
                            // 这里可以添加成功后的处理逻辑
                        }

                        /**
                         * 合成失败回调
                         * @param webSocket WebSocket连接
                         * @param throwable 异常对象
                         * @param response HTTP响应
                         */
                        @Override
                        public void onFail(WebSocket webSocket, Throwable throwable, Response response) {
                            // 打印错误信息
                            System.out.println(throwable.getMessage());
                        }

                        /**
                         * 业务失败回调
                         * @param webSocket WebSocket连接
                         * @param ttsResponse TTS业务响应
                         */
                        @Override
                        public void onBusinessFail(WebSocket webSocket, TtsResponse ttsResponse) {
                            // 打印业务错误信息
                            System.out.println(ttsResponse.toString());
                        }
                    });
        } catch (Exception e) {
            // 捕获并打印异常
            System.out.println(e.getMessage());
            // 提示错误码查询链接
            System.out.println("错误码查询链接：https://www.xfyun.cn/document/error-code");
        }
    }
}